Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / vendor / lxmfy / tests / test_fsm_config.py

Displaying Raw • Download


vendor/lxmfy/tests/test_fsm_config.py dev (25212991) Text, 3.11 KB

T8b949e"""Combinatorial and FSM testing for framework configuration."""

Tff7b72import T7ee787pytest
Tff7b72import T7ee787itertools
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Tff7b72from T7ee787lxmfy Tff7b72import Te6edf3BotConfigTb4b4b4, Te6edf3LXMFBot


Tff7b72class T56d364TestFrameworkPermutationsTb4b4b4:
T8b949e"""Combinatorial testing of bot configurations."""

Tff7b72def Td2a8fftest_pairwise_config_initializationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Test a matrix of configuration settings to ensure no conflicting states."""

T8b949e# Define dimensions of our configuration space
Te6edf3options Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffcogs_enabledTa5d6ff"Tb4b4b4: Tb4b4b4[Tff7b72TrueTb4b4b4, Tff7b72FalseTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffnlp_enabledTa5d6ff"Tb4b4b4: Tb4b4b4[Tff7b72TrueTb4b4b4, Tff7b72FalseTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffpermissions_enabledTa5d6ff"Tb4b4b4: Tb4b4b4[Tff7b72TrueTb4b4b4, Tff7b72FalseTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsignature_verification_enabledTa5d6ff"Tb4b4b4: Tb4b4b4[Tff7b72TrueTb4b4b4, Tff7b72FalseTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffstorage_typeTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffjsonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsqliteTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}

T8b949e# Get all permutations (Cartesian product)
T8b949e# Note: In a real "ALLLLL" test we use all, but pairwise is smarter
Te6edf3keys Tff7b72= Te6edf3optionsTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)
Te6edf3values Tff7b72= Te6edf3optionsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)

Te6edf3count Tff7b72= T79c0ff0
Tff7b72for Te6edf3combination Tff7b72in Te6edf3itertoolsTff7b72.Td2a8ffproductTb4b4b4(Tff7b72*Te6edf3valuesTb4b4b4)Tb4b4b4:
Te6edf3config_dict Tff7b72= Tffa657dictTb4b4b4(Tffa657zipTb4b4b4(Te6edf3keysTb4b4b4, Te6edf3combinationTb4b4b4)Tb4b4b4)

T8b949e# Add required fields
Te6edf3config_dictTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffTestBot_Tffd700{Te6edf3countTffd700}Ta5d6ff"
Te6edf3config_dictTb4b4b4[Ta5d6ff"Ta5d6ffstorage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3test_config_dir Tff7b72/ Ta5d6fffTa5d6ff"Ta5d6ffconfig_test_Tffd700{Te6edf3countTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3config_dictTb4b4b4[Ta5d6ff"Ta5d6fftest_modeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True

Tff7b72tryTb4b4b4:
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3config_dictTb4b4b4)
Tff7b72assert Te6edf3bot Tff7b72is Tff7b72not Tff7b72None
T8b949e# Basic sanity check of initialized components
Tff7b72if Te6edf3config_dictTb4b4b4[Ta5d6ff"Ta5d6ffnlp_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72assert Te6edf3botTff7b72.Td2a8ffnlp Tff7b72is Tff7b72not Tff7b72None
Tff7b72if Te6edf3config_dictTb4b4b4[Ta5d6ff"Ta5d6ffpermissions_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72assert Te6edf3botTff7b72.Td2a8ffpermissionsTff7b72.Td2a8ffenabled Tff7b72is Tff7b72True

Te6edf3botTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Te6edf3count Tff7b72+Tff7b72= T79c0ff1
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3pytestTff7b72.Td2a8fffailTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffBot failed to initialize with combination Tffd700{Te6edf3config_dictTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"
Tb4b4b4)

Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff[Combinatorial] Successfully verified Tffd700{Te6edf3countTffd700}Ta5d6ff configuration permutations.Ta5d6ff"
Tb4b4b4)

Tff7b72def Td2a8fftest_fsm_message_lifecycle_transitionsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3test_config_dirTb4b4b4)Tb4b4b4:
T8b949e"""Verify the Finite State Machine transitions of a message."""
Te6edf3config Tff7b72= Te6edf3BotConfigTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffFSMBotTa5d6ff"Tb4b4b4,
Te6edf3storage_pathTff7b72=Tffa657strTb4b4b4(Te6edf3test_config_dir Tff7b72/ Ta5d6ff"Ta5d6fffsm_storageTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3test_modeTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Te6edf3bot Tff7b72= Te6edf3LXMFBotTb4b4b4(Tff7b72*Tff7b72*Te6edf3configTff7b72.Td2a8ff__dict__Tb4b4b4)

T8b949e# Define states for our "Message"
T8b949e# State: QUEUED -> (SENT | FAILED)

Te6edf3message_content Tff7b72= Ta5d6ff"Ta5d6ffFSM TestTa5d6ff"
Te6edf3dest Tff7b72= Ta5d6ff"Ta5d6ffabc123defTa5d6ff"

T8b949e# 1. Transition: None -> QUEUED
Te6edf3botTff7b72.Td2a8ffsendTb4b4b4(Te6edf3destTb4b4b4, Te6edf3message_contentTb4b4b4)
Tff7b72assert Te6edf3botTff7b72.Td2a8ffqueueTff7b72.Td2a8ffqsizeTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff1

T8b949e# Peek at the message
Te6edf3msg Tff7b72= Te6edf3botTff7b72.Td2a8ffqueueTff7b72.Td2a8ffqueueTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3msgTff7b72.Td2a8ffcontentTff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3message_content

T8b949e# 2. Transition: QUEUED -> SENT (Simulated by processing queue)
Te6edf3botTff7b72.Td2a8ffrouter Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
T8b949e# Non-blocking run-once of the queue processing logic
Tff7b72while Tff7b72not Te6edf3botTff7b72.Td2a8ffqueueTff7b72.Td2a8ffemptyTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3lxm Tff7b72= Te6edf3botTff7b72.Td2a8ffqueueTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4)
Te6edf3botTff7b72.Td2a8ffrouterTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)

Tff7b72assert Te6edf3botTff7b72.Td2a8ffqueueTff7b72.Td2a8ffqsizeTb4b4b4(Tb4b4b4) Tff7b72== T79c0ff0
Te6edf3botTff7b72.Td2a8ffrouterTff7b72.Td2a8ffhandle_outboundTff7b72.Td2a8ffassert_called_onceTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────